#ifndef TCP_SOCKET_H
#define TCP_SOCKET_H

#include "InetAddress.h"

class Socket{
public:
    explicit Socket(int sockfd): sockfd_(sockfd) {}

    ~Socket();

    /**
     * 获取维护的socket文件描述符
     * @return
     */
    int fd() const { return sockfd_; }

    /**
     * bind操作封装
     * @param addr
     */
    void bindAddress(const InetAddress & addr);

    /**
     * listent操作封装
     */
    void listen();

    /**
     * acception操作封装, 返回对应结果
     */
    int accept(InetAddress * peeraddr);

    /**
     * 用于获取socket文件描述符在本地保存的地址信息
     * @param sockfd 要获取的文件描述符的地址信息
     * @return
     */
    static struct sockaddr_in getLocalAddr(int sockfd);

    /**
     * 将连接到socket的对等方的地址信息存放起来
     * @param sockfd
     * @return
     */
    static struct sockaddr_in getPeerAddr(int sockfd);

private:
    const int sockfd_;
};

#endif //TCP_SOCKET_H
